from datetime import datetime

from django import template
from django.utils import timezone

# 类名加括号是实例化对象 注册器对象
register = template.Library()


def my_capfirst(value):
    return value.capitalize()


register.filter('mycapfirst', my_capfirst)


# @register.simple_tag(name='crt')
@register.simple_tag
def current_time(format_string):
    # 通过datetime获取到的当前的时间戳
    # strftime=stringformattime 就是时间字符串格式化
    return datetime.now().strftime(format_string)


@register.filter
def time_since(value):
    """
    过滤器：对发布时间进行处理
    1.如果和当前时间间隔小于1分钟，显示“刚刚”
    2.如果大于1分钟小于1小时，显示"xx分钟前"
    3.如果大于1小时小于1天，显示"xx小时前"
    4.如果大于24小时小于30天，显示"xx天前"
    5.如果大于30天，显示具体的时间
    :param value: 发布时间
    :return: 显示信息
    """
    now = timezone.localtime()
    # 计算时间间隔 当前时间减去传进来的时间
    timestamp = (now - value).total_seconds()  # 时间差，单位是秒
    if timestamp < 60:
        return '刚刚'
    elif 60 <= timestamp < 60 * 60:
        res = int(timestamp / 60)
        return f'{res}分钟前'
    elif 60 * 60 <= timestamp < 60 * 60 * 24:
        res = int(timestamp / (60 * 60))
        return f'{res}小时前'
    elif 60 * 60 * 24 <= timestamp < 60 * 60 * 24 * 30:
        res = int(timestamp / (60 * 60 * 24))
        return f'{res}天前'
    else:
        return value.strftime('%Y-%m-%d %H:%M:%S')
